<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 万物皆对象  

        //  任何对象都属于一个类 
        //    每个人   人类 
        //    每辆车    车类
        //    每个饭店   饭店类 
        //     每支笔     笔类 

        // 解决问题  
        //   面向过程    ->  面向对象  
        //   每个过程都得亲历其为   ->  找一个会做这个事情的对象   只要结果  



        // 如何得到对象  


        // 字面量方式创建对象  

        var obj1 = {};
        obj1.name = '张三';
        obj1.age = 18;

        var obj2 = {};
        obj2.name = '李四';
        obj2.age = 19;
        // 这种方式 可以吃创建对象 但是 不能批量创建  


        // 内置构造函数的方式创建  
        // var obj3 = new Object();
        // obj3.name = '王五';
        // obj3.age = 17;


        // var obj4 = new Object();
        // obj4.name = '赵六';
        // obj4.age = 19;

         // 这种方式 可以吃创建对象 但是 不能批量创建 



         // 工厂函数  
         // 工厂用来生产产品  我们可以让这个产品是对象  

        //  function createObj(){
        //     return {
        //         name:'张三',
        //         age:18
        //     }

        //  }
        //  var obj1 = createObj();
        //  var obj2 = createObj();

        //  alert(obj1 === obj2);


        //  function createObj(name,age){
        //     return {
        //         name:name,
        //         age:age
        //     }

        //  }
        //  var obj1 = createObj('fuxiang',17);
        //  var obj2 = createObj('yuhe',16);



         // 工厂函数  可以批量得到对象 
         // 每个对象各自独立  


        //  alert(obj1 === obj2);


        // 构造函数 创建对象 

        // 箭头函数  不能作为构造函数   也就是 箭头函数 不可能跟new 一起用 

        // 本质是个函数   
        // 特点 :
            // 跟new 关键字 一起用  
            // 当函数 跟new 关键字一起用的时候 我们叫构造函数调用  
            // 这个函数 跟 new 一起用  会自动创建 并返回一个对象  

            // 函数 中 有this   this代表的 就是自动创建 并返回的这个对象  


       function createobj2(name,age){
            // this 指向的是新创建的对象 
            this.username = name;
            this.userage = age;

       }

    //    new createobj2()  跟new 一起用 不再是普通的函数  属于构造函数  
    //    跟new 一起用 会自动创建并返回一个新对象 

       var o1 = new createobj2('zhangsan',18); // 实例化一个对象 o1
       // this 指向 o1 
       var o2 = new createobj2('李四',19);
       //  实例化一个对象 o2  this 指向 o2
       var o3 = new createobj2('王五',19);
        //  实例化一个对象 o3  this 指向 o3








    </script>
</body>
</html>